perm filename DISPLA.FAI[REV,MUS] blob sn#281463 filedate 1977-05-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE DISPLA
C00004 00003	DISPLA:	SETO	line,
C00005 00004	Both:	HRRZ	len,length
C00007 ENDMK
C⊗;
TITLE DISPLA
INTERNAL DISPLA
;Convert SAIL strings to DPY outputs for III and Data Disk

;INTERNAL PROCEDURE display(
;      INTEGER position;
;      STRING text;
;      INTEGER pog);

DEFINE posit <-2(p)>
DEFINE pog <-1(p)>
DEFINE length <-1(sp)>
DEFINE string <(sp)>
DEFINE nargs <2>
DEFINE nsargs <1>
DEFINE SUBRET <
	SUB	p,[<nargs>+1,,<nargs>+1]
	SUB	sp,[2*<nsargs>,,2*<nsargs>]
	JRST	@<nargs>+1(p)
>

;AC's
p←←17
sp←←16
cmd←←1
line←←0
tmp←←0
bp←←1
len←←2
c←←3

;Line characteristics
DDDLIN←←20000
IIILIN←←400000

DEFINE CW(C1,B1,C2,B2,C3,B3) <
	<BYTE (8)<B1>,<B2>,<B3> (3)<C1>,<C2>,<C3>>!4
>

;Command names for DD command bytes
EXCT←←0;			Execute
FNCN←←1 ALPHBG←←6 ALPHA←←46;	Function
CHNL←←2;			Channel select
COLM←←3;			Column select
HILIN←←4;			Set high 5 bits of line address
LOLIN←←5			Set low 4 bits of line address

DISPLA:	SETO	line,
	GETLIN	line
	AOJE	line,Detchd

	TLNN	line,DDDLIN!IIILIN
	JRST	Notdpy

	JUMPL	line,IIIdpy

DDDdpy:	MOVE	tmp,[CW  FNCN,ALPHA, CHNL,0, FNCN,ALPHA]
	MOVEM	tmp,DPYBUF
	MOVE	tmp,[CW  COLM,2, HILIN,0, LOLIN,0]
	MOVEM	tmp,DPYBUF+1
	MOVN	tmp,posit
	ASH	tmp,-1
	ADDI	tmp,400
	DPB	tmp,[POINT 4,DPYBUF+1,23]
	LSH	tmp,-4
	DPB	tmp,[POINT 5,DPYBUF+1,15]

	JRST	Both

IIIdpy:	MOVE	tmp,[BYTE  (11)<-777>,0  (3)2,2 (2)1,2 (4)6]
	MOVEM	tmp,DPYBUF+1;
	MOVE	tmp,posit
	DPB	tmp,[POINT 11,DPYBUF+1,21]

Both:	HRRZ	len,length
	MOVE	bp,[POINT 7,TXTBUF]
	CAILE	len,TXTLEN-2		;to allow for CR LF we add
	MOVEI	len,TXTLEN-2
	MOVE	tmp,[TXTBUF,,TXTBUF+1]
	MOVEI	c,1
	MOVEM	c,TXTBUF
	BLT	tmp,TXTEND
	JUMPL	len,Nullst
Loop:	ILDB	c,string
	IDPB	c,bp
	SOJG	len,Loop
	
	MOVEI	c,15
	IDPB	c,bp
	MOVEI	c,12
	IDPB	c,bp
	SETZM	1(bp)
	HRRZI	bp,2-DPYBUF(bp)
	MOVEM	bp,DPYHED+1
	MOVE	cmd,[UPGIOT 0,DPYHED]
	MOVE	tmp,pog
	DPB	tmp,[POINT 4,cmd,12]
	XCT	cmd

Nullst:
Notdpy:
Detchd:	SUBRET


;Data blocks
DPYHED:	200000,,DPYBUF
	TXTLEN+3
	0
	DPYBUF+1

DPYBUF:	BLOCK	2
TXTBUF:	BLOCK	=200
TXTEND:	0
	0
TXTLEN←←(1+TXTEND-TXTBUF)*5

	END